home *** CD-ROM | disk | FTP | other *** search
- //: C19:Sorted.h
- // From Thinking in C++, 2nd Edition
- // Available at http://www.BruceEckel.com
- // (c) Bruce Eckel 1999
- // Copyright notice in Copyright.txt
- // Template specialization
- #ifndef SORTED_H
- #define SORTED_H
- #include <vector>
-
- template<class T>
- class Sorted : public std::vector<T> {
- public:
- void sort();
- };
-
- template<class T>
- void Sorted<T>::sort() { // A bubble sort
- for(int i = size(); i > 0; i--)
- for(int j = 1; j < i; j++)
- if(at(j-1) > at(j)) {
- // Swap the two elements:
- T t = at(j-1);
- at(j-1) = at(j);
- at(j) = t;
- }
- }
-
- // Partial specialization for pointers:
- template<class T>
- class Sorted<T*> : public std::vector<T*> {
- public:
- void sort();
- };
-
- template<class T>
- void Sorted<T*>::sort() {
- for(int i = size(); i > 0; i--)
- for(int j = 1; j < i; j++)
- if(*at(j-1) > *at(j)) {
- // Swap the two elements:
- T* t = at(j-1);
- at(j-1) = at(j);
- at(j) = t;
- }
- }
-
- // Full specialization for char*:
- template<>
- void Sorted<char*>::sort() {
- for(int i = size(); i > 0; i--)
- for(int j = 1; j < i; j++)
- if(strcmp(at(j-1), at(j)) > 0) {
- // Swap the two elements:
- char* t = at(j-1);
- at(j-1) = at(j);
- at(j) = t;
- }
- }
- #endif // SORTED_H ///:~
-